{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Map plots\n",
    "\n",
    "Plots on Mapbox maps are available only considering you have a Mapbox account and a Mapbox Access Token. After getting a mabox token it can be written set to pandapower as the following (where `'<token>'` needs to be replaced with provided mapbox token)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandapower.plotting.plotly.mapbox_plot import set_mapbox_token\n",
    "set_mapbox_token('<token>')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If network geodata are in Geographic coordinate system as latitude/longitude, a network can be plot on different maps.\n",
    "Moreover, if network geodata are not in latitude/longitude, but in some of the projections, it may be converted to lat/long by providing name of the projection (in the form '*epsg:projection_number*'according to http://spatialreference.org/ref/epsg/).  \n",
    "  \n",
    "Following example shows plot of the network mv_oberrhein, where network geodata are in Gauss-Kruger projection (zone 3).  \n",
    "Since geodata are not in lat/long, plot using only `on_map=True` cannot be realized on a map:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandapower.plotting.plotly import simple_plotly, pf_res_plotly, vlevel_plotly\n",
    "from pandapower.networks import mv_oberrhein\n",
    "\n",
    "net = mv_oberrhein()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The plot can be obtained if one knows specific projection and zone. In this case it is 3-degree Gauss-Kruger zone 3, which corresponds to [epsg:31467](http://spatialreference.org/ref/epsg/31467/):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = mv_oberrhein()\n",
    "simple_plotly(net, on_map=True, projection='epsg:31467')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Transforming geo-data from a projection to lat/long\n",
    "There is a function available in pandapower which uses `pyproj` to transform geodata from a projection to WGS84 (lat/long). It transforms and replaces `net.bus_geodata` and `net.line_geodata` (if existing). An example for `mv_oberreihn`: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = mv_oberrhein()\n",
    "print('before:\\n', net.bus_geodata.head())\n",
    "\n",
    "from pandapower.plotting.plotly.mapbox_plot import geo_data_to_latlong\n",
    "geo_data_to_latlong(net, projection='epsg:31467')\n",
    "print('\\nafter:\\n', net.bus_geodata.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Some more map plots..."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following map styles are available:\n",
    "* 'streets'\n",
    "* 'bright'\n",
    "* 'light'\n",
    "* 'dark'\n",
    "* 'satellite'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "simple_plotly(net, on_map=True,map_style='satellite')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "net = mv_oberrhein()\n",
    "simple_plotly(net, on_map=True, projection='epsg:31467', map_style='streets')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pf_res_plotly(net, on_map=True, map_style='dark')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "More tutorials about interactive plots using ploltly:\n",
    "* [built-in interactive plots](http://nbviewer.jupyter.org/github/e2nIEE/pandapower/blob/develop/tutorials/plotly_built-in.ipynb)\n",
    "* [custom interactive plots](http://nbviewer.jupyter.org/github/e2nIEE/pandapower/blob/develop/tutorials/plotly_traces.ipynb)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
